// frontend/src/router/index.js (最终 Plan B - 最稳定版)

import { createRouter, createWebHistory } from 'vue-router';
import { useAuthStore } from '@/stores';
import MainLayout from '../layouts/MainLayout.vue';
import NestedRouterViewLayout from '../layouts/NestedRouterViewLayout.vue';

const routes = [
    {
        path: '/login',
        name: 'Login',
        component: () => import('../views/LoginPage.vue'),
        meta: {
            title: '登录',
            requiresAuth: false  // 明确标记此页面不需要认证
        }
    },
    {
        path: '/',
        component: MainLayout,
        meta: {
            requiresAuth: true // 标记所有在此布局下的子页面都需要登录
        },
        children: [
            // 1. Bucket 列表页 (保持不变)
            {
                path: '',
                name: 'BucketList',
                component: () => import('../views/BucketListPage.vue'),
                meta: { title: 'Bucket 列表' }
            },

            // 2. Bucket 详情页的父级路由
            {
                path: 'buckets/:bucketName',
                name: 'BucketDetail',
                component: () => import('../layouts/BucketDetailLayout.vue'),
                props: route => ({
                    bucketName: route.params.bucketName,
                    // 确保path永远是一个数组
                    path: Array.isArray(route.params.path) ? route.params.path : []
                }),
                // ==================== 【Plan B - 最稳定方案】 ====================
                children: [
                    // 规则 1: 专门用于 Bucket 根目录
                    // 它只匹配像 /buckets/testbucketlins 这样的 URL
                    {
                        path: '', // <-- 匹配空路径
                        name: 'BucketContents', // <-- 统一使用这个名字
                        component: () => import('../views/BucketContentsPage.vue'),
                        // 当匹配这个路由时，props 里只有 bucketName
                        props: true,
                        meta: { title: '文件列表' }
                    },
                    // 规则 2: 专门用于 Bucket 的子目录
                    // 它匹配像 /buckets/testbucketlins/folder1/ 这样的 URL
                    {
                        path: ':path(.*)+', // <-- 匹配一个或多个段
                        name: 'BucketContentsWithPath', // <-- 【重要】给它一个不同的名字，避免冲突
                        component: () => import('../views/BucketContentsPage.vue'),
                        // 当匹配这个路由时，props 里有 bucketName 和 path
                        props: route => ({
                            bucketName: route.params.bucketName,
                            path: Array.isArray(route.params.path) ? route.params.path : []
                        }),
                        meta: { title: '文件列表' }
                    },
                    // 规则 3: 上传路由
                    {
                        path: 'upload/:path(.*)*',
                        name: 'ObjectUpload',
                        component: () => import('../views/ObjectUploadPage.vue'),
                        props: route => ({
                            bucketName: route.params.bucketName,
                            // 如果 route.params.path 是数组，就用它；否则，返回一个空数组
                            path: Array.isArray(route.params.path) ? route.params.path : []
                        }),
                        meta: { title: '上传文件' }
                    },
                    {
                        path: 'upload-from-url/:path(.*)*', // <-- 新的路径
                        name: 'UrlUpload',                 // <-- 新的路由名称
                        component: () => import('../views/UrlUploadPage.vue'), // <-- 指向新页面
                        props: route => ({
                            bucketName: route.params.bucketName,
                            // 将当前路径也传递过去，作为新页面的默认保存位置
                            path: Array.isArray(route.params.path) ? route.params.path : []
                        }),
                        meta: { title: '从URL上传' }
                    },
                    // 规则4：删除 Bucket 的路由
                    {
                        path: 'delete', // URL会是 /buckets/my-bucket-name/delete
                        name: 'DeleteBucket',
                        component: () => import('../views/DeleteBucketPage.vue'),
                        props: true, // 这样页面能直接通过 props 获取 bucketName
                        meta: { title: '删除 Bucket' }
                    },
                    {
                        path: 'lifecycle', // URL会是 /buckets/my-bucket/lifecycle
                        name: 'BucketLifecycle',
                        component: () => import('../views/permissions/LifecyclePage.vue'), // <-- 指向我们刚创建的页面
                        props: true,
                        meta: { title: '生命周期' }
                    },
                    // 【核心修改】为权限控制下的每个子菜单创建独立的路由
                    {
                        // "阻止公共访问" 的路由
                        path: 'permissions/public-access-block',
                        name: 'BucketPublicAccessBlock',
                        component: () => import('../views/permissions/PublicAccessBlockPage.vue'), // <-- 指向一个新页面
                        props: true,
                        meta: { title: '阻止公共访问' }
                    },
                    {
                        // "读写权限" 的路由
                        path: 'permissions/acl',
                        name: 'BucketAcl',
                        component: () => import('../views/permissions/AclPage.vue'), // <-- 指向另一个新页面
                        props: true,
                        meta: { title: '读写权限' }
                    },
                    {
                        path: 'website',
                        name: 'BucketWebsite',
                        component: () => import('../views/StaticWebsitePage.vue'), // 指向新页面
                        props: true,
                        meta: { title: '静态网站托管' }
                    },
                    {
                        path: 'security/versioning', // URL 会是 /buckets/my-bucket/security/versioning
                        name: 'BucketVersioning',
                        component: () => import('../views/data-security/VersioningPage.vue'), // 指向新创建的页面
                        props: true, // 自动将 bucketName 作为 prop 传入
                        meta: { title: '版本控制' }
                    },
                    {
                        path: 'logging',
                        redirect: { name: 'BucketLoggingSettings' }, // 默认重定向到设置页
                        // 这个组件可以是一个空的 <router-view />，用于渲染下一层 children
                        // 或者直接省略 component 属性，Vue Router 也能处理
                        component: NestedRouterViewLayout,
                        children: [
                            {
                                path: 'settings',
                                name: 'BucketLoggingSettings',
                                component: () => import('../views/LoggingSettingsPage.vue'),
                                props: true,
                                meta: { title: '日志存储配置' }
                            },
                            {
                                path: 'viewer',
                                name: 'BucketLogViewer',
                                component: () => import('../views/LogViewerPage.vue'),
                                props: true,
                                meta: { title: '日志查询' }
                            }
                        ]
                    },
                    {
                        path: 'permissions/policy', // URL: /buckets/my-bucket/permissions/policy
                        name: 'BucketPolicy',
                        component: () => import('../views/permissions/PolicyPage.vue'), // <-- 新建页面
                        props: true,
                        meta: { title: '存储桶策略' }
                    },
                    {
                        path: 'permissions/cors', // URL: /buckets/my-bucket/permissions/cors
                        name: 'BucketCORSSettings',
                        component: () => import('../views/permissions/CORSSettingsPage.vue'), // 指向新页面
                        props: true,
                        meta: { title: '跨域设置' }
                    },
                ]
                // =============================================================
            },
            {
                path: 'settings', // URL 将是 /settings
                name: 'Settings',
                component: () => import('../views/SettingsPage.vue'),
                meta: { title: '偏好设置' }
            },
        ]
    },
];

const router = createRouter({
    history: createWebHistory(),
    routes,
});

router.beforeEach(async (to, from, next) => {
    // 设置页面标题
    document.title = `S3 Browser - ${to.meta.title || '联通云'}`;

    const authStore = useAuthStore();

    // 检查即将进入的路由是否需要认证
    const requiresAuth = to.matched.some(record => record.meta.requiresAuth);

    // 在第一次导航时，如果本地没有登录状态，则先向后端确认一次
    if (authStore.user === null && authStore.isLoggedIn === false && from.name === undefined) {
        await authStore.checkAuthStatus();
    }

    // 核心逻辑
    if (requiresAuth && !authStore.isLoggedIn) {
        // 如果页面需要登录，但用户未登录 -> 跳转到登录页
        next({
            name: 'Login',
            // 保存用户原本想去的页面路径，登录成功后可以跳回去
            query: { redirect: to.fullPath }
        });
    } else if (to.name === 'Login' && authStore.isLoggedIn) {
        // 如果用户已登录，但又试图访问登录页 -> 直接跳转到首页
        next({ name: 'BucketList' });
    } else {
        // 其他情况（访问公共页，或已登录访问受保护页） -> 正常放行
        next();
    }
});

export default router;